home *** CD-ROM | disk | FTP | other *** search
/ STraTOS 1997 April & May / STraTOS 1 - 1997 April & May.iso / CD01 / PRGMANIA / VERSION1.5 / TESTST.C < prev    next >
Encoding:
C/C++ Source or Header  |  1996-12-26  |  16.5 KB  |  643 lines

  1. /*************************************************************************
  2.  * Test - (c) 1996 Philippe Castella                                     *
  3.  * Programme de test de la librarie WindGem                              *
  4.  *************************************************************************/
  5.  
  6. /*************************************************************************
  7.  * Fichiers à inclure                                                    *
  8.  *************************************************************************/
  9. #include <WindGem.h>        /* Formulaires en fenêtre */
  10. #include <xgemfast.h>
  11. #include "testst.h"                /* Définition des objets  */
  12. #include <macros.h>
  13. #include <falcon30.h>
  14.  
  15. /*************************************************************************
  16.  * Prototypes des fonctions du programme                                 *
  17.  *************************************************************************/
  18. static int UserImg[] =
  19. {
  20.   0xffff,0xffff,0x8000,0x0001,0xbfff,0xfffd,0xa000,0x0005,
  21.   0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,
  22.   0xa000,0x0005,0xa000,0x0005,0xa813,0xf3e5,0xa814,0x0a15,
  23.   0xa814,0x0215,0xa814,0x0215,0xa812,0x0215,0xa811,0x0225,
  24.   0xa810,0xc2c5,0xa810,0x2285,0xa810,0x1245,0xa810,0x0a25,
  25.   0xa814,0x0a15,0xa7e3,0xf215,0xa000,0x0005,0xafff,0xfff5,
  26.   0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,0xa000,0x0005,
  27.   0xa000,0x0005,0xbfff,0xfffd,0x8000,0x0001,0xffff,0xffff,
  28. };
  29.  
  30. static BITBLK user_icn = {(short *)&UserImg[0],4,32,0,0,1};
  31.  
  32. void gereMenuWind(int opt);
  33. void gereMenuText(int opt);
  34. void gereMenu(int option);
  35. void main(void);
  36. void init_prog(void);
  37.  
  38. void informe(int evnt);
  39. void form(int evnt);
  40. void systeme(int evnt);
  41. void form1(int evnt);
  42.  
  43. void UserInit (void);
  44. void UserExit (void);
  45. void UserMessage (int evnt, int buff[8]);
  46. void UserClavier (int kbd, int key);
  47. void UserSouris (int x, int y, int k, int nb);
  48.  
  49. extern System *Sys;
  50. /*************************************************************************
  51.  * Paramètres de l'application                                           *
  52.  *************************************************************************/
  53. int finProg = FALSE;
  54. int ouvert = FALSE;
  55. int user = 0;
  56. int snd = TRUE;
  57.  
  58. char texte[50][30];
  59. char **textUser;
  60.  
  61. void gereMenuWind(int opt)
  62. {
  63.     form_alert(1,"[1][|Gestion d'un Menu en fenêtre !!|][Ok]");    
  64. }
  65.  
  66. void gereMenuText(int opt)
  67. {
  68.     static int count = 0;
  69.     int nblig, nbcol;
  70.     char **texte, lig[20];
  71.     
  72.     switch (opt)
  73.     {
  74.         case MTFERME :
  75.             WindDelete (CurWindow);
  76.             break;
  77.         case MTMODIF :
  78.             nblig = GetWindText (CurWindow, &texte, &nbcol);
  79.             sprintf(lig,"<< Change ligne %d >>", count);
  80.             strcpy(texte[count], lig);
  81.             count++;
  82.             SetWindText (CurWindow, nblig, nbcol, texte);
  83.             break;        
  84.     }
  85.  
  86. }
  87.  
  88. void gereToolBar(int opt)
  89. {
  90.     form_alert(1,"[1][|Gestion d'une ToolBar en fenêtre !!|][Ok]");    
  91.     ToolBarUnselect (CurWindow, opt, REDRAW);
  92. }
  93.  
  94. void gerePopup (int option)
  95. {
  96.     switch (option)
  97.     {
  98.     case POP1 :
  99.     case POP2 :
  100.     case POP3 :
  101.     case POP4 :
  102.         form_alert(1,"[1][|Gestion d'un popup Menu par appui|sur la touche droite de la souris !!|][Ok]");
  103.         break;
  104.     }
  105. }
  106.  
  107. void gereMenu (int option)
  108. {
  109.     char chemin[128], fname[13] = {0};
  110.     char message[256];
  111.     int numTxt, numTxt1, ret;
  112.     GRECT Fpos;
  113.     int i;
  114.     static icn = -1;
  115.  
  116.     int wx, wy, ww, wh;
  117.                 
  118.     switch (option)
  119.     {
  120.     case MSYST :
  121.         WindOpen(SYSTEME);
  122.         break;
  123.  
  124.     case MFORM :
  125.         WindOpen(FORM);
  126.         break;
  127.  
  128.     case MTEXTE :
  129.         strcpy(chemin,"\\");
  130.         if (selector (chemin, "*.*", fname, "Choisir un fichier texte"))
  131.         {
  132.             if (strcmp(fname,"") != 0)
  133.             {
  134.                 Fpos.g_x = 10;
  135.                 Fpos.g_y = 10;
  136.                 Fpos.g_w = 200;
  137.                 Fpos.g_h = 100;
  138.                 strcat(chemin, fname);
  139.                 numTxt = WindTextInit (chemin, &Fpos, (char *)NULL);
  140. /*                AjouteToolBar(numTxt, TOOLBAR, NODRAW, gereToolBar);*/
  141.                 AjouteMenu(numTxt, MENUTEXT, NODRAW, gereMenuText);
  142.                 WindOpen(numTxt);
  143.             }
  144.         }
  145.         break;
  146.  
  147.     case MTEXTE1 :
  148.         Fpos.g_x = 20;
  149.         Fpos.g_y = 20;
  150.         Fpos.g_w = 150;
  151.         Fpos.g_h = 100;
  152.         numTxt1 = WindTextInit ("", &Fpos, "Contenu géré par l'utilisateur");
  153.         AjouteMenu(numTxt1, MENUTEXT, NODRAW, gereMenuText);
  154.         WindOpen(numTxt1);
  155.         SetWindText (numTxt1, 50, 19, textUser);
  156.         break;
  157.         
  158.     case MUSER :
  159.         WindOpen(user);        
  160.         break;
  161.  
  162.     case MSLIDER :
  163.         
  164.         SetSlider(SLIDINI, 100, 0, "Essai du Slider");
  165.  
  166.         for (i=0;i < 100;i++)
  167.             SetSlider(SLIDAFF, 0, i, "");
  168.             
  169.         SetSlider(SLIDEND, 0, 0, "");
  170.  
  171.         break;
  172.         
  173.     case MINFO :
  174.         WindOpen(PROGINFO);
  175.         break;
  176.  
  177.     case MALERTE :
  178.         strcpy (message, "Boîte d'alerte - |");
  179.         strcat (message, "- 6 lig. de texte|");
  180.         strcat (message, "- longueur max = 60 car.|");
  181.         strcat (message, "- 4 boutons max = 20 car.|");
  182.         strcat (message, "- 14 icônes prédéf. et ...|");
  183.         strcat (message, "- ...icônes Utilisateurs.");
  184.         ret = WindAlerte (icn++, &user_icn, message, "N° 1|N° 2|N° 3|N° 4", 1);
  185.     break;
  186.  
  187.     case MQUITTER :
  188.         finProg = TRUE;
  189.         break;
  190.     }
  191. }
  192.  
  193. /*-----------------------------------------------------------------------*/
  194. void main(void)
  195. /*-----------------------------------------------------------------------*
  196.  * Fonction principale                                                   *
  197.  * - Initialisation,                                                     *
  198.  * - Gestion des événements,                                             *
  199.  * - Fin du programme.                                                   *
  200.  *-----------------------------------------------------------------------*/
  201. {
  202.     int i;
  203.     textUser = (char **)malloc(50 * sizeof(char **));
  204.  
  205.     for (i = 0; i < 50; i++)
  206.     {
  207.         sprintf (texte[i], "Ligne de texte n°%2d", i + 1);
  208.     textUser[i] = texte[i];
  209.   }
  210.  
  211.     init_prog();
  212.  
  213.     do
  214.     {
  215.         EventMulti();
  216.     } while (NOT finProg);
  217.  
  218.     free (textUser);            /* Texte définit par l'utilisateur -> libérer la */
  219.                                                 /* mémoire soi-même !!!                          */
  220.  
  221.     AppExit();
  222.     exit(0);
  223. }
  224.  
  225. void init_prog(void)
  226. {
  227.     GRECT pos;
  228. /*    int Xd, Yd, Wd, Hd, Xr, Yr, N, Wh, Hh;*/
  229.     
  230.     AppInit("Testst.rsc", DESK, (void *)NULL, MENU, gereMenu);
  231.  
  232. /* Affichage de quelques info système.
  233.     GetCharSize (&Wh, &Hh);
  234.     GetDeskXYWH (&Xd, &Yd, &Wd, &Hd);
  235.     GetVideoRes (&Xr, &Yr, &N);
  236.     sprintf (mes, "[1][Desk x=%d y=%d w=%d h=%d|Char w=%d h=%d|Res x=%d y=%d plans=%d][Ok]",Xd, Yd, Wd, Hd, Wh,Hh, Xr, Yr, N);
  237.     form_alert(1,mes);
  238. */    
  239.     WindFormInit(PROGINFO, WMODAL , 0, 0, "Informations"            , 0      , informe   );
  240.     WindFormInit(FORM    , WNORM , 0, 0, "Créer une nouvelle fiche", STIT, form);
  241.     AjoutePopup (FORM, SCAT, POPUP);
  242.  
  243. /*    AjouteMenu(FORM, WMENU, NODRAW, gereMenuWind);*/
  244.     AjouteToolBar(FORM, TOOLBAR, NODRAW, gereToolBar);
  245.  
  246.     AjouteAide (FORM, SSAUV, "Bouton menu...|Permet d'ajouter ou d'enlever|dynamiquement un menu...");
  247.     AjouteAide (FORM, SANNU, "Bouton d'annulation|Ferme la fiche sans sauvegarde|de son contenu...");
  248.     AjouteAide (FORM, SCAT, "Bouton de popup|Permet de sélectionner la catégorie|du livre...");
  249.     AjouteAide (FORM, SAIDE, "Bouton HELP|Permet de faire appel à l'aide en ligne|enfin bientôt...");
  250.  
  251.     WindFormInit(SYSTEME, WNORM , 0, 0, "Information Système", 0, systeme);
  252.  
  253.  
  254.     pos.g_x = 40;
  255.     pos.g_y = 40;
  256.     pos.g_w = 200;
  257.     pos.g_h = 100;
  258. /*    user = WindUserInit ((NAME|CLOSER|FULLER|MOVER|SMALLER|SIZER), pos, "Fenêtre User Defined", UserInit, UserExit, UserMessage, UserClavier, UserSouris, (void *)NULL);*/
  259.     user = WindUserInit ((NAME|CLOSER|FULLER|MOVER|SMALLER|SIZER), pos, "Fenêtre User Defined", UserInit, (void *)NULL, UserMessage, (void *)NULL, UserSouris, (void *)NULL);
  260.  
  261. /*    AjouteMenu(user, WMENU, NODRAW, gereMenuWind);*/
  262.     AjouteToolBar(user, TOOLBAR, NODRAW, gereToolBar);
  263.  
  264.     PopMenu(POPUPM, gerePopup);
  265. }
  266.  
  267.  
  268. /*-----------------------------------------------------------------------*
  269.  * Routines de gestion du menu                                           *
  270.  *-----------------------------------------------------------------------*/
  271. void informe(int evnt)
  272. {
  273.     int choix;
  274.     
  275.     if (evnt & MU_BUTTON)
  276.     {
  277.         choix = GetObjet();
  278.         if (choix > 0)
  279.         {
  280.             ObjcUnselect (PROGINFO, choix);
  281.             WindClose(PROGINFO);
  282.         }
  283.     }
  284. }
  285.  
  286. void form(int evnt)
  287. {
  288.     int choix;
  289.     static int flag = FALSE;
  290.  
  291.     if (evnt == EV_OPEN)
  292.     {
  293.         form_alert(1,"[1][Fonction appelee à |l'ouverture de la fenetre][Ok]");
  294.         ToolBarSelect (FORM, TBOPT2, NODRAW);
  295.     }        
  296.     if (evnt == EV_CLOSE)
  297.     {
  298.         form_alert(1,"[1][Fonction appelee à |la fermeture de la fenetre][Ok]");
  299.         /* ATTENTION : ne pas fermer la fenetre */
  300.     }        
  301.     if (evnt & MU_BUTTON)
  302.     {
  303.         choix = GetObjet();
  304.  
  305.         if (choix == SSAUV)
  306.         {
  307.             if (! flag)
  308.             {
  309.                 flag = TRUE;
  310.                 form_alert(1,"[1][Ajout d'un menu dynamiquement][Ok]");
  311.                 AjouteMenu(FORM, WMENU, REDRAW, gereMenuWind);
  312. /*                AjouteToolBar(FORM, TOOLBAR, REDRAW, gereToolBar);*/
  313.             }
  314.             else
  315.             {
  316.                 flag = FALSE;
  317.                 form_alert(1,"[1][Suppression d'un menu dynamiquement][Ok]");
  318.                 EnleveMenu(FORM, REDRAW);
  319. /*                EnleveToolBar(FORM, REDRAW);*/
  320.             }        
  321.         }
  322.  
  323.         if (choix == SAIDE)
  324.         {
  325.             StGuide ("WindGem.Hyp", "StGuide");
  326.         }
  327.  
  328.         if (choix == SANNU || choix == SSAUV || choix == SAIDE)
  329.             ObjcUnselect (FORM, choix);
  330.  
  331.         if (choix == SANNU || choix == EV_CLOSE)
  332.             WindClose(FORM);
  333.     }
  334. }
  335.  
  336. void systeme(int evnt)
  337. {
  338.     int choix;
  339.     char txt[30];
  340.     
  341.     if (evnt == EV_OPEN)
  342.     {
  343.         switch (Ordi.Processor)
  344.         {
  345.             case M68000 :
  346.                 SetValeur (SYSTEME, SYSPROC, "68000");
  347.                 break;
  348.             case M68010 :
  349.                 SetValeur (SYSTEME, SYSPROC, "68010");
  350.                 break;
  351.             case M68020 :
  352.                 SetValeur (SYSTEME, SYSPROC, "68020");
  353.                 break;
  354.             case M68030 :
  355.                 SetValeur (SYSTEME, SYSPROC, "68030");
  356.                 break;
  357.         }
  358.         if (Ordi.Machine == ST)
  359.                 SetValeur (SYSTEME, SYSMACH, "ST        ");
  360.         else if (Ordi.Machine == STE)
  361.                 SetValeur (SYSTEME, SYSMACH, "STE       ");
  362.         else if (Ordi.Machine == MSTE)
  363.                 SetValeur (SYSTEME, SYSMACH, "Mega STE  ");
  364.         else if (Ordi.Machine == TT)
  365.                 SetValeur (SYSTEME, SYSMACH, "TT 030    ");
  366.         else if (Ordi.Machine == FALCON30)
  367.                 SetValeur (SYSTEME, SYSMACH, "Falcon 030");
  368.         else
  369.                 SetValeur (SYSTEME, SYSMACH, "Inconnue  ");
  370.  
  371.         switch (hibyte(hiword(Ordi.Fdc)))
  372.         {
  373.             case 0 :
  374.                 SetValeur(SYSTEME, SYSFDC, "DD");
  375.                 break;
  376.             case 1 :
  377.                 SetValeur(SYSTEME, SYSFDC, "HD");
  378.                 break;
  379.             case 2 :
  380.                 SetValeur(SYSTEME, SYSFDC, "ED");
  381.                 break;
  382.         }
  383.  
  384.         switch (Ordi.Keyboard)
  385.         {
  386.             case KEYB_USA :
  387.                 SetValeur (SYSTEME, SYSCLAV, "USA     ");
  388.                 break;
  389.             case KEYB_D :
  390.                 SetValeur (SYSTEME, SYSCLAV, "Allemand");
  391.                 break;                
  392.             case KEYB_F :
  393.                 SetValeur (SYSTEME, SYSCLAV, "Français");
  394.                 break;
  395.             case KEYB_GB :
  396.                 SetValeur (SYSTEME, SYSCLAV, "Anglais ");
  397.                 break;
  398.             case KEYB_SP :
  399.                 SetValeur (SYSTEME, SYSCLAV, "Espagnol");
  400.                 break;
  401.             case KEYB_I :
  402.                 SetValeur (SYSTEME, SYSCLAV, "Italien ");
  403.                 break;
  404.             case KEYB_CHD :
  405.                 SetValeur (SYSTEME, SYSCLAV, "Suisse D");
  406.                 break;
  407.             case KEYB_CHF :
  408.                 SetValeur (SYSTEME, SYSCLAV, "Suisse F");
  409.                 break;
  410.         }
  411.         switch (Ordi.Language)
  412.         {
  413.             case LG_USA :
  414.                 SetValeur (SYSTEME, SYSLANG, "USA     ");
  415.                 break;
  416.             case LG_D :
  417.                 SetValeur (SYSTEME, SYSLANG, "Allemand");
  418.                 break;                
  419.             case LG_F :
  420.                 SetValeur (SYSTEME, SYSLANG, "Français");
  421.                 break;
  422.             case LG_GB :
  423.                 SetValeur (SYSTEME, SYSLANG, "Anglais ");
  424.                 break;
  425.             case LG_SP :
  426.                 SetValeur (SYSTEME, SYSLANG, "Espagnol");
  427.                 break;
  428.             case LG_I :
  429.                 SetValeur (SYSTEME, SYSLANG, "Italien ");
  430.                 break;
  431.             case LG_CHD :
  432.                 SetValeur (SYSTEME, SYSLANG, "Suisse D");
  433.                 break;
  434.             case LG_CHF :
  435.                 SetValeur (SYSTEME, SYSLANG, "Suisse F");
  436.                 break;
  437.         }
  438.         if (Ordi.Shifter == SHIFTER_ST)
  439.             SetValeur(SYSTEME, SYSSHIF, "ST    ");
  440.         else if (Ordi.Shifter == SHIFTER_STE)    
  441.             SetValeur(SYSTEME, SYSSHIF, "STE   ");
  442.         else if (Ordi.Shifter == SHIFTER_TT)
  443.             SetValeur(SYSTEME, SYSSHIF, "TT    ");
  444.         else if (Ordi.Shifter == VIDEL_FALCON)
  445.             SetValeur(SYSTEME, SYSSHIF, "Falcon");
  446.         else
  447.             SetValeur(SYSTEME, SYSSHIF, "??????");
  448.  
  449.         strcpy(txt, "");
  450.         if (Ordi.Sound & PSG)
  451.             strcat(txt, "PSG ");
  452.         if (Ordi.Sound & DSP)
  453.             strcat(txt, "DSP ");
  454.         if (Ordi.Sound & CODEC)
  455.             strcat(txt, "CODEC ");
  456.         if (Ordi.Sound & MATRICE)
  457.             strcat(txt, "MATRICE ");
  458.  
  459.         strcomplete (txt, 24, ' ', INS_APRES);
  460.         SetValeur (SYSTEME, SYSSND, txt);
  461.         switch (Ordi.Fpu)
  462.         {
  463.             case NO_FPU :
  464.                 SetValeur (SYSTEME, SYSFPU, "Aucun       ");
  465.                 break;
  466.             case SFP004 :
  467.                 SetValeur (SYSTEME, SYSFPU, "SFP004      ");
  468.                 break;
  469.             case C68881_2 :
  470.                 SetValeur (SYSTEME, SYSFPU, "C68881_2    ");
  471.                 break;
  472.             case C68881_2_SFP :
  473.                 SetValeur (SYSTEME, SYSFPU, "C68881_2_SFP");
  474.                 break;
  475.             case C68881 :
  476.                 SetValeur (SYSTEME, SYSFPU, "C68881      ");
  477.                 break;
  478.             case C68881_SFP :
  479.                 SetValeur (SYSTEME, SYSFPU, "C68881_SFP  ");
  480.                 break;
  481.             case C68882 :
  482.                 SetValeur (SYSTEME, SYSFPU, "C68882      ");
  483.                 break;
  484.             case C68882_SFP :
  485.                 SetValeur (SYSTEME, SYSFPU, "C68882_SFP  ");
  486.                 break;
  487.             case C68040 :
  488.                 SetValeur (SYSTEME, SYSFPU, "C68040      ");
  489.                 break;
  490.             case C68040_SFP :
  491.                 SetValeur (SYSTEME, SYSFPU, "C68040_SFP  ");
  492.                 break;
  493.         }
  494.         switch (Ordi.Date)
  495.         {
  496.             case DATE_MJA :
  497.                 SetValeur (SYSTEME, SYSDATE, "MJA");
  498.                 break;
  499.             case DATE_JMA :
  500.                 SetValeur (SYSTEME, SYSDATE, "JMA");
  501.                 break;
  502.             case DATE_AMJ :
  503.                 SetValeur (SYSTEME, SYSDATE, "AMJ");
  504.                 break;
  505.             case DATE_AJM :
  506.                 SetValeur (SYSTEME, SYSDATE, "AJM");
  507.                 break;
  508.         }
  509.         sprintf(txt, "%c",Ordi.Separator);
  510.         SetValeur(SYSTEME, SYSSEP, txt);
  511.  
  512.         if (Ordi.Time)
  513.             SetValeur (SYSTEME, SYSTIME, "12");
  514.         else
  515.             SetValeur (SYSTEME, SYSTIME, "24");
  516.  
  517.         sprintf (txt, "%X", Ordi.TosVersion);
  518.         SetValeur (SYSTEME, SYSTOS, txt);
  519.  
  520.         sprintf (txt, "%X%X", lobyte(Ordi.GemdosVersion), hibyte(Ordi.GemdosVersion));
  521.         SetValeur (SYSTEME, SYSGEMD, txt);
  522.         sprintf (txt, "%X", Ordi.AesVersion);
  523.         SetValeur (SYSTEME, SYSAES, txt);
  524.         if (Ordi.MultiTosVersion == 0)
  525.             SetValeur (SYSTEME, SYSMINT, "Non");
  526.         else
  527.         {
  528.             sprintf (txt, "%X", Ordi.MultiTosVersion);
  529.             SetValeur (SYSTEME, SYSMINT, txt);
  530.         }
  531.         if (Ordi.Magic)
  532.             SetValeur (SYSTEME, SYSMAG, "Oui");
  533.         else
  534.             SetValeur (SYSTEME, SYSMAG, "Non");
  535. }
  536.     
  537.     if (evnt & MU_BUTTON)
  538.     {
  539.         choix = GetObjet();
  540.         if (choix > 0)
  541.         {
  542.             ObjcUnselect (SYSTEME, choix);
  543.             WindClose(SYSTEME);
  544.         }
  545.     }
  546. }
  547. /************************************************************************/
  548. /* Fonctions de gestion de la fenêtre utilisteur                        */
  549. /************************************************************************/
  550. void UserInit (void)
  551. {
  552.         form_alert(1,"[1][User : Init][Ok]");
  553. }
  554.  
  555. void UserExit (void)
  556. {
  557.         form_alert(1,"[1][User : Exit][Ok]");
  558. }
  559.  
  560. void UserMessage (int evnt, int buff[8])
  561. {
  562.     GRECT rd, coord, r;
  563.     int h, xy[4];
  564.  
  565.     h = GetHandle (user);
  566.         
  567. /*
  568.     if (evnt == MU_MESAG)
  569.         form_alert(1,"[1][User : Message][Ok]");
  570.     else
  571.         form_alert(1,"[1][User : Touche spéciale][Ok]");
  572. */
  573.  
  574.     if (evnt == MU_MESAG)
  575.     {
  576.         switch(buff[0])
  577.         {
  578.             case WM_REDRAW :
  579.                 rd.g_x = buff[4]; rd.g_y = buff[5];
  580.                 rd.g_w = buff[6]; rd.g_h = buff[7];        
  581.                 GetWorkXYWH (user, &coord);
  582.  
  583.                 v_hide_c (VdiHandle);    /* Virer la souris */
  584.                 wind_update (BEG_UPDATE);     /* Bloquer les fonctions de la souris */
  585.  
  586.                 /* Demande les coord. et dimensions du 1° rectangle de la liste */
  587.                 wind_get (buff[3], WF_FIRSTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
  588.  
  589.                 while (r.g_w && r.g_h)            /* Tant qu'il y a largeur ou hauteur... */
  590.                 {
  591.                     set_clip (1, &r);     /* Clipping ON */
  592.                     if (rc_intersect (&rd, &r)) /* Si intersection des 2 zones */
  593.                     {
  594.                   xy[0] = r.g_x;
  595.                   xy[1] = r.g_y;
  596.                   xy[2] = xy[0] + r.g_w - 1;
  597.                   xy[3] = xy[1] + r.g_h - 1;
  598.  
  599.                   vsf_color(VdiHandle, BLACK);
  600.                         vr_recfl(VdiHandle, xy);
  601.         
  602.                     }
  603.                     /* Rectangle suivant */
  604.                     set_clip (0, &r);     /* Clipping OFF */
  605.                     wind_get (buff[3], WF_NEXTXYWH, &r.g_x, &r.g_y, &r.g_w, &r.g_h);
  606.                 }
  607.                 wind_update(END_UPDATE);
  608.                 v_show_c (VdiHandle, 1);             /* Rappeler la souris */
  609.  
  610.                 break;
  611.  
  612.         }
  613.     }    
  614. }
  615.  
  616. void UserClavier (int kbd, int key)
  617. {
  618.         form_alert(1,"[1][User : Clavier][Ok]");
  619. }
  620.  
  621. void UserSouris (int x, int y, int k, int nb)
  622. {
  623.     int pxy[4];
  624.     GRECT r;
  625. /*        form_alert(1,"[1][User : Souris][Ok]");*/
  626.  
  627.     GetWorkXYWH (user, &r);
  628.     v_hide_c (VdiHandle);
  629.     set_clip (1, &r);     /* Clipping ON */
  630.     /* Affichage d'un point sous le curseur de la souris */
  631.   vsl_color (VdiHandle, WHITE);
  632.     pxy[0] = x;
  633.     pxy[1] = y;
  634.     pxy[2] = x;
  635.     pxy[3] = y;
  636.   v_pline (VdiHandle, 2, pxy);
  637.     set_clip (0, &r);     /* Clipping OFF */
  638.     v_show_c (VdiHandle,1);
  639.     
  640. }
  641.  
  642. /*----------------------------------------------------------------------*/
  643.